﻿using System;
using System.Collections.Generic;

using System.Text;

namespace Sinacor.Tools.Negocio
{
    public class Modulo : NegocioBase<Entidade.Modulo>
    {
        protected Dado.Modulo dados = null;
        public override void incluir(Sinacor.Tools.Entidade.Modulo entidade)
        {
            throw new NotImplementedException();
        }

        public override void alterar(Sinacor.Tools.Entidade.Modulo entidade)
        {
            throw new NotImplementedException();
        }

        public override void deletar(Sinacor.Tools.Entidade.Modulo entidade)
        {
            throw new NotImplementedException();
        }

        public override List<Sinacor.Tools.Entidade.Modulo> consultar(Sinacor.Tools.Entidade.Modulo entidade)
        {
            dados = new Sinacor.Tools.Dado.Modulo();
            lock (dados)
            {
                return dados.consultar(entidade);
            }
        }

        public List<Sinacor.Tools.Entidade.Modulo> consultar()
        {
            lock (new object())
            {
                dados = new Sinacor.Tools.Dado.Modulo();
                return dados.consultar();
            }
        }

        public static int buscarProximoId(Entidade.Modulo entidade)
        {
            lock (new object())
            {
                
                Sinacor.Tools.Dado.Modulo dados = new Sinacor.Tools.Dado.Modulo();
                object retorno = dados.buscarProximoId(entidade);
                if (retorno == null)
                    retorno = entidade.InicioRangeMensagem;
                else if (Convert.ToInt32(retorno) < entidade.InicioRangeMensagem || Convert.ToInt32(retorno) > entidade.FimRangeMensagem)
                    throw new Exception("O código da exceção retornado (" + Convert.ToString(retorno) + ") não está no range (de " + 
                        entidade.InicioRangeMensagem.ToString() + " a + " + entidade.FimRangeMensagem.ToString() + ") cadastrado para o módulo, verifique. ");

                return Convert.ToInt32(retorno);
            }
        }

        public static int buscarProximoId(string descricaoModulo)
        {

            if (string.IsNullOrEmpty(descricaoModulo)) throw new Exception("Módulo passado nulo ou vazio, verifique!");
            Entidade.Modulo modulo = new Sinacor.Tools.Entidade.Modulo(descricaoModulo, string.Empty);
            
            Negocio.Modulo nModulo = new Modulo();
            List<Sinacor.Tools.Entidade.Modulo> modulos = nModulo.consultar(modulo);
            if (modulos.Count == 0) throw new Exception("Não existe módulo cadastrado com a descrição [" + descricaoModulo + "]");

            return buscarProximoId(modulos[0]);
        }
    }
}
